Các cấp độ của tầm vực Tầm_vực_(khoa_học_máy_tính)

Tầm vực có thể thay đổi từ mức độ ít nhất như một biểu thức đơn cho đến nhiều nhất là toàn bộ chương trình, với nhiều mức độ ở giữa. Quy tắc tầm vực đơn giản nhất là tầm vực toàn cục (global scope) – tất cả các thực thể đều được hiển thị (visible) trong toàn bộ chương trình. Quy tắc tầm vực mô đun cơ bản nhất là tầm vực hai cấp, với một tầm vực toàn cục trong chương trình, và tầm vực cục bộ (local scope) trong một hàm. Lập trình mô đun phức tạp hơn cho phép một tầm vực mô đun tách rời, trong đó tên được hiển thị trong mô đun (riêng tư (private) với mô đun) nhưng không hiển thị bên ngoài mô đun đó. Với hàm, trong một số ngôn ngữ như C, cho phép tầm vực khối (block scope) để giới hạn tầm vực đối với môtj tập con của một hàm; còn với một số ngôn ngữ lập trình chức năng đáng chú ý khác, lại cho phép tầm vực biểu thức (expression scope), để giới hạn tầm vực cho một biểu thức đơn. Các tầm vực khác bao gồm tầm vực tập tin (file scope) (đáng chú ý trong C), có chức năng tương tự như tầm vực mô đun, và tầm vực khối ở bên ngoài của hàm (đáng chú ý trong Perl).

Một vấn đề khó phân biệt chính xác là khi nào một tầm vực bắt đầu và kết thúc. Trong một số ngôn ngữ như C, một tầm vực bắt đầu khi khai báo, và do vậy các tên khác nhau được khai báo trong một khối nhất định có thể có tầm vực khác nhau. Điều này đòi hỏi phải khai báo hàm trước khi dùng, mặc dù không nhất thiết phải định nghĩa chúng, và yêu cầu tiền khai báo (forward declaration) trong một số trường hợp, đáng chú ý trong đệ quy hỗ tương (mutual recursion). Trong các ngôn ngữ khác, như JavaScript hay Python, tầm vực của tên bắt đầu khi có khối liên quan (như bắt đầu của một hàm), bất kể nó được định nghĩa ở đâu, và tất cả tên trong một khối nhất định có cùng tầm vực; trong JavaScript điều này được gọi là variable hoisting. Tuy nhiên, khi tên bị ràng buộc với một giác khi khác nhau, và hành vi của các tên trong ngữ cảnh có giá trị không được xác định (undefined variable) khác nhau: trong Python việc sử dụng biến không xác định sẽ gây ra lỗi lúc chạy (runtime error), trong khi với JavaScript biến không xác định cón thể sử dụng được (với giá trị không xác định), nhưng định nghĩa hàm cũng được kéo lên đỉnh của hàm chứa và có thể sử dụng trong toàn hàm.

Tầm vực tập tin

Tầm vực khối

Tầm vực hàm

Tầm vực toàn cục